/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package py.fpuna.ii.electiva2.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 *
 * @author Lauri
 */
@Entity
@Table(name = "producto")
@NamedQueries({
    @NamedQuery(name = "Producto.findAll", query = "SELECT p FROM Producto p"),
    @NamedQuery(name = "Producto.findByProdCodigo", query = "SELECT p FROM Producto p WHERE p.prodCodigo = :prodCodigo"),
    @NamedQuery(name = "Producto.findByProdDescripcion", query = "SELECT p FROM Producto p WHERE p.prodDescripcion = :prodDescripcion"),
    @NamedQuery(name = "Producto.findByProdCantidad", query = "SELECT p FROM Producto p WHERE p.prodCantidad = :prodCantidad"),
    @NamedQuery(name = "Producto.findByProdPrecioCompra", query = "SELECT p FROM Producto p WHERE p.prodPrecioCompra = :prodPrecioCompra"),
    @NamedQuery(name = "Producto.findByProdPrecioVenta", query = "SELECT p FROM Producto p WHERE p.prodPrecioVenta = :prodPrecioVenta")})
public class Producto implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id

    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="producto_seq_generator")
    @SequenceGenerator(name="producto_seq_generator", sequenceName="producto_prod_codigo_seq", allocationSize=1)

    @Basic(optional = false)
    @Column(name = "prod_codigo")
    private Integer prodCodigo;
    @Basic(optional = false)
    @Column(name = "prod_descripcion")
    private String prodDescripcion;
    @Column(name = "prod_cantidad")
    private Integer prodCantidad;
    @Column(name = "prod_precio_compra")
    private Integer prodPrecioCompra;
    @Column(name = "prod_precio_venta")
    private Integer prodPrecioVenta;
    @OneToMany(mappedBy = "compProducto")
    private Collection<Compra> compraCollection = new ArrayList<Compra>();
    @JoinColumn(name = "prod_proveedor", referencedColumnName = "prov_codigo")
    @ManyToOne(optional = false)
    private Proveedor prodProveedor;
    @OneToMany(mappedBy = "ventProducto")
    private Collection<Venta> ventaCollection = new ArrayList<Venta>();

    public Producto() {
    }

    public Producto(Integer prodCodigo) {
        this.prodCodigo = prodCodigo;
    }

    public Producto(Integer prodCodigo, String prodDescripcion) {
        this.prodCodigo = prodCodigo;
        this.prodDescripcion = prodDescripcion;
    }

    public Producto(Integer prodCodigo, String prodDescripcion, Integer prodCantidad, Integer prodPrecioCompra, Integer prodPrecioVenta, Proveedor prodProveedor) {
        this.prodCodigo = prodCodigo;
        this.prodDescripcion = prodDescripcion;
        this.prodCantidad = prodCantidad;
        this.prodPrecioCompra = prodPrecioCompra;
        this.prodPrecioVenta = prodPrecioVenta;
        this.prodProveedor = prodProveedor;
    }

    public Integer getProdCodigo() {
        return prodCodigo;
    }

    public void setProdCodigo(Integer prodCodigo) {
        this.prodCodigo = prodCodigo;
    }

    public String getProdDescripcion() {
        return prodDescripcion;
    }

    public void setProdDescripcion(String prodDescripcion) {
        this.prodDescripcion = prodDescripcion;
    }

    public Integer getProdCantidad() {
        return prodCantidad;
    }

    public void setProdCantidad(Integer prodCantidad) {
        this.prodCantidad = prodCantidad;
    }

    public Integer getProdPrecioCompra() {
        return prodPrecioCompra;
    }

    public void setProdPrecioCompra(Integer prodPrecioCompra) {
        this.prodPrecioCompra = prodPrecioCompra;
    }

    public Integer getProdPrecioVenta() {
        return prodPrecioVenta;
    }

    public void setProdPrecioVenta(Integer prodPrecioVenta) {
        this.prodPrecioVenta = prodPrecioVenta;
    }

    public Collection<Compra> getCompraCollection() {
        return compraCollection;
    }

    public void setCompraCollection(Collection<Compra> compraCollection) {
        this.compraCollection = compraCollection;
    }

    public Proveedor getProdProveedor() {
        return prodProveedor;
    }

    public void setProdProveedor(Proveedor prodProveedor) {
        this.prodProveedor = prodProveedor;
    }

    public Collection<Venta> getVentaCollection() {
        return ventaCollection;
    }

    public void setVentaCollection(Collection<Venta> ventaCollection) {
        this.ventaCollection = ventaCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (prodCodigo != null ? prodCodigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Producto)) {
            return false;
        }
        Producto other = (Producto) object;
        if ((this.prodCodigo == null && other.prodCodigo != null) || (this.prodCodigo != null && !this.prodCodigo.equals(other.prodCodigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "py.fpuna.ii.electiva2.entity.Producto[prodCodigo=" + prodCodigo + "]";
    }

}
